import Storage from 'react-native-storage';
import AsyncStorage from '@react-native-async-storage/async-storage';

const storage = new Storage({
  // 最大容量，默认值1000条数据循环存储
  size: 1000,

  // 存储引擎：对于RN使用AsyncStorage，对于web使用window.localStorage
  // 如果不指定则数据只会保存在内存中，重启后即丢失
  storageBackend: AsyncStorage,

  // 数据过期时间，默认一整天（1000 * 3600 * 24 毫秒），设为null则永不过期
  defaultExpires: null,

  // 读写时在内存中缓存数据。默认启用。
  enableCache: true,
});

class StorageUtil {
  /**
   * 储存
   * @param key
   * @param data
   */
  public static async save<T>(key: string, data: T) {
    try {
      await storage.save({ key, data });
      return Promise.resolve();
    } catch (error) {
      return Promise.reject();
    }
  }

  /**
   * 获取storage
   * @param key
   */
  public static async load<T>(key: string) {
    try {
      const storageData = await storage.load<T>({ key });
      if (storageData !== null) return storageData;
    } catch (error) {
      // console.error(error);
      return null;
    }
  }

  /**
   * 删除key
   * @param key
   */
  public static async remove(key: string): Promise<void> {
    try {
      await storage.remove({ key });
      return Promise.resolve();
    } catch (error) {
      return Promise.reject();
    }
  }
}

export default StorageUtil;
